//引入express模块
const express=require('express');
//引入连接池模块
const pool=require('../pool.js');
//console.log(pool);
//创建路由器对象
let router=express.Router();
//添加路由
//1,用户注册 post /register
//完整接口形式:http://127.0.0.1:8080/user/register
router.post('/register',(req,res,next)=>{
    //1.1,获取post请求的数据
    let obj=req.body;
    console.log(obj);
    //1.2,验证数据是否为空，如果为空，做出响应
    if(!obj.uname){
        //json方法是将js对象转为json对象,和send作用一样
        res.json({code:401,msg:'uname不能为空'});
        //阻止往后执行
        return;
    }
    if(!obj.upwd){
        res.send({code:402,msg:'upwd不能为空'});
        return;
    }
    if(!obj.email){
        res.send({code:403,msg:'email不能为空'});
        return;
    }
    if(!obj.phone){
        res.send({code:404,msg:'phone不能为空'})
        return;
    }
    //验证手机号格式,用正则表达式.test(手机号)
    if(!/^1[3-9]\d{9}$/.test(obj.phone)){
        res.send({code:405,msg:'手机号码格式错误'});
        return;
    }
    //1.3插入数据,执行SQL语句
    pool.query('INSERT INTO xz_user SET ?',[obj],(err,result)=>{
        if(err){
            //如果数据库执行出现了错误,交给下一个错误处理的中间件
            next(err);
            //阻止往后执行
            return;
        }
        console.log(result);
            res.send({code:200,msg:'register success'});
    });  
});

//2,用户登录 post /login
//完整接口形式:http://127.0.0.1:8080/user/login
router.post('/login',(req,res,next)=>{
    //2.1获取数据
    let obj=req.body;
    console.log(obj);
    //2.2验证数据是否为空
    if(!obj.uname){
        res.send({code:401,msg:'uname不能为空'});
        return;
    }
    if(!obj.upwd){
        res.send({code:402,msg:'upwd不能为空'});
        return;
    }
    //2.3执行SQL语句
    pool.query('SELECT * FROM xz_user WHERE uname=? AND upwd=?',[obj.uname,obj.upwd],(err,result)=>{
        if(err){
            //如果出现了错误,交给下一个错误处理的中间件
            next(err);
            return;
        }
        console.log(result);
        //如果返回的数组长度>0，说明成功，否则失败
        if(result.length>0){
            res.send({code:200,msg:'login success'});
        }else{
            res.send({code:201,msg:'login err'});
        }
    });
});

//3,查找用户 get /编号
//完整接口形式:http://127.0.0.1:8080/user/5
router.get('/:uid',(req,res,next)=>{
    //3.1获取数据
    let obj=req.params;
    console.log(obj);
    //3.2执行SQL语句
    pool.query('select uid,uname,email,phone from xz_user where uid=?',[obj.uid],(err,result)=>{
        if(err){
            //如果出现了错误,交给下一个错误处理的中间件
            next(err);
            return;
        }
        console.log(result);
        //结果是数组，如果是空数组说明该用户不存在，否则查找成功
        if(result.length>0){
            res.send({
                code:200,
                msg:'查找成功',
                data:result
            });
        }else{
            res.send({code:201,msg:'不存在该用户'});
        }
    });
});

//4,修改用户资料 put /
//完整接口形式:http://127.0.0.1:8080/user/
router.put('/',(req,res,next)=>{
    //4.1获取数据
    let obj=req.body;
    console.log(obj);
    //4.2验证数据是否为空
    let i=400;//记录状态码
    //key是属性名,obj[key]是属性值
    for(let key in obj){
        i++;
        console.log(key,obj[key]);
        //如果属性值为空,提示属性名这项不能为空
        if(!obj[key]){
            res.send({code:i,msg:`${key}不能为空`});
            return;
        }
    }
    //4.3执行SQL语句
    pool.query('UPDATE xz_user SET ? WHERE uid=?',[obj,obj.uid],(err,result)=>{
        if(err){
            next(err);//如果出现了错误,交给下一个错误处理的中间件
            return;
        }
        console.log(result);
        //结果是对象,如果对象下的affectedRows的值>0则修改成功,否则失败
        if(result.affectedRows>0){
            res.send({code:200,msg:'update success'});
        }else{
           res.send({code:201,msg:'update err'});
        }
    });
});

//5,用户列表 get /
router.get('/',(req,res,next)=>{
    //5.1获取查询字符串(get)传递的数据
    let obj=req.query;
    //console.log(obj);
    //5.2验证是否为空，如果为空设置默认值
    if(!obj.pno) obj.pno=1;
    if(!obj.count) obj.count=3;
    //console.log(obj);
    //5.3计算开始查询的值start
    let start=(obj.pno-1)*obj.count;
    //5.4将每页数据量转为整型
    obj.count=parseInt(obj.count);
    //5.5执行SQL语句
    pool.query('SELECT uid,uname,email,phone FROM xz_user LIMIT ?,?',[start,obj.count],(err,result)=>{
        if(err) {
            next(err);
            return;
        }
        console.log(result);
        //查询的结果是数组，把数组响应给浏览器端
        res.send({
            code:200,
            msg:'查找成功',
            data:result
        });
    });
});

//6,删除用户 delete /编号
//完整接口形式:http://127.0.0.1:8080/user/5
router.delete('/:uid',(req,res,next)=>{
    //6.1获取数据
    let obj=req.params;
    console.log(obj);
    //6.2执行SQL语句
    pool.query('DELETE FROM xz_user WHERE uid=?',[obj.uid],(err,result)=>{
        if(err){
            next(err);
            return;
        }
        console.log(result);
        //结果是对象,如果对象下的affectedRows的值>0则删除成功,否则失败
        if(result.affectedRows>0){
            res.send({code:200,msg:'delete success'});
        }else{
            res.send({code:201,msg:'delete err'});
        } 
    });
});

//导出路由器对象
module.exports=router;